const express = require('express')
const qs = require('querystring')
// 引入 jwt
const jwt = require('jsonwebtoken')
const user_power = require('./backData/userPower')
const power_data = require('./backData/powerData')
// 分页的数据
let pagingArr = []

// 搭建应用
const app = express()
app.use(express.json())

// 定义加密字符串
const secret = 'secretToken'

const userList = [
    { id: 1, username: '王建宇', online: false, userpower: '管理员用户', password: 'admin' , sex: '男', hobby: '玩游戏', age: 521},
    { id: 2, username: '周学贤', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '打台球', age: 9527},
    { id: 3, username: '涂博文', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '唱、跳、rap', age: 1314},
    { id: 4, username: '王君吉', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '跳', age: 123},
    { id: 5, username: '秦智航', online: false, userpower: '普通用户', password: 'admin' , sex: '保密', hobby: 'rap', age: 777},
    { id: 6, username: '田淼', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '跳、rap', age: 10000},
    { id: 7, username: '卡卡西', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '写轮眼', age: 555},
    { id: 8, username: '亚古兽', online: false, userpower: '普通用户', password: 'admin' , sex: '女', hobby: '变身', age: 45},
    { id: 9, username: '凯多', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '雷鸣八卦', age: 21},
    { id: 10, username: '艾尼路', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '10万伏特', age: 9},
    { id: 11, username: '山治', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '火腿', age: 27},
    { id: 12, username: '孙悟空', online: false, userpower: '普通用户', password: 'admin' , sex: '男', hobby: '火眼晶晶', age: 54545},
    { id: 13, username: '二郎神', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '73变', age: 16548},
    { id: 14, username: '猪八戒', online: false, userpower: '普通用户', password: 'admin' , sex: '神话', hobby: '睡觉', age: 23},
    { id: 15, username: '喜羊羊', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '聪明伶俐', age: 344},
    { id: 16, username: '美羊羊', online: false, userpower: '普通用户', password: 'admin' , sex: '女', hobby: '双标典例', age: 111},
    { id: 17, username: '憨八龟', online: false, userpower: '普通用户', password: 'admin' , sex: '未知', hobby: '科技', age: 777},
    { id: 18, username: '丹顶鹤', online: false, userpower: '普通用户', password: 'admin' , sex: '鸟', hobby: '齐齐哈尔', age: 3241},
]

// 获取token接口
app.post('/token',(req,res)=>{
    // 前端传过来的数据
    data  = req.body
    // console.log(data);
    // console.log(req.headers);
    // 如果接收的人的姓名和密码 与 userList 里面的一样 ，则返回token和信息，否则返回失败,给出错误提示
    let resArr = userList.find(item => {
        return item.username === data.username
    })

    // 如果这个个人存在，且密码相同，则提示登陆成功
    if(resArr && resArr.password === data.password){
        // 生成token
        const token = jwt.sign(data,secret)
        // 返回前端
        res.json({
            code : 200,
            msg : '登录成功',
            userId: resArr.id,
            data : data,
            token
        })
    // 用户存在，密码不正确
    }else if(resArr && resArr.password !== data.password){
        res.json({
            code : 300,
            msg : '密码不正确',
        })
    // 用户不存在
    }else{
        res.json({
            code : 400,
            msg : '用户不存在',
        })
    }
    return
})

// 获取用户菜单列表
app.post('/getUserMenu',(req,res)=>{
    // 前端传过来的数据
    data  = req.body
    const user = user_power.find(item => Number(data.userId) === Number(item.id))
    const userPower = user.power.map(item => {
        return power_data.find(value => item == value.id)
    })

    res.json({
        code: 200,
        data : userPower
    })

})

// 管理员用户登录，获取全部用户权限接口
app.get('/getMasterPower',(req,res)=>{
    // 要给前端返回的数组
    let data = []
    // 每一个用户
    let obj = {}
    // 每一个用户里面的power里面的对象
    let userObj = {}
    // 用户列表遍历，拿到id、username、password
    userList.forEach(item => {
        obj = {}
        obj.id = item.id
        obj.username = item.username
        obj.password = item.password
        obj.sex = item.sex
        obj.hobby = item.hobby
        obj.age = item.age
        obj.userpower = item.userpower
        // 每个用户的权限
        obj.power = []
        // 拿到遍历里面每一个用户的权限集合对象
        let power_resulet = user_power.find(userPower => {
            userObj = {}
            return userPower.id === item.id
        })
        // 遍历权限集合里面的权限
        let mapRes = power_resulet.power.map( value => {
            // 去所有权限里面找对应的权限
            return power_data.find(val =>{
                return value === val.id
            })
        })
        // 扔进每个用户权限
        obj.power.push(mapRes)
        // 放入要给前端返回的数组
        data.push(obj)
        // 深拷贝
        data2 = JSON.parse(JSON.stringify(data)).splice(0,13)
        // 给分页数组赋值
        pagingArr = data
    })

    // 返回给前端
    setTimeout(()=>{
        res.json({
            code: 200,
            data : data2,
            count : data.length
        })
    },1500)
})

// 管理员用户、及权限分页接口
app.get('/getManagerPaging',(req,res)=>{
    // 深拷贝数据
    let pagingArr2 = JSON.parse(JSON.stringify(pagingArr))
    // 定义要返给前端的数据
    let data = pagingArr2.splice((req.query.page - 1) * 13, req.query.total)
    
    // 返回给前端
    res.json({
        code: 200,
        data : data
    })

})





// 监听端口号
app.listen(9527,()=>{
    console.log('端口号为  9527  的服务运行了!~!');
})